﻿#define  _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
//class A{ 
//public: void test(float a) 
//{ 
//	cout << a;
//} 
//}; 
//class B :public A
//{ 
//public: void test(int b)
//{ 
//	cout << b; 
//} 
//}; 
//
//void main()
//{ 
//	A *a = new A; 
//	B *b = new B; 
//	a = b; 
//	a->test(1.1); 
//} 

//class B
//{
//public:
//	int b;
//};
//
//class C1 : public B
//{ 
//public: int c1;
//};
//
//class C2 : public B 
//{ 
//public: int c2; 
//};
//
//class D : public C1, public C2 
//{ 
//	 
//public: int d;
//};
//int main()
//{
//	cout << sizeof D;
//	return 0;
//}
// 
//class A
//{
//public:
//  void f1() { cout << "A::f1()" << endl; }
//  virtual void f2() { cout << "A::f2()" << endl; }
//  virtual void f3() { cout << "A::f3()" << endl; }
//
//};
//
//
//
//class B : public A
//{
//public:
//	virtual void f1() { cout << "B::f1()" << endl; }
//	virtual void f2() { cout << "B::f2()" << endl; }
//	void f3() { cout << "B::f3()" << endl; }
//};

//class A
//{
//public:
//    virtual void f()
//    {
//        cout << "A::f()" << endl;
//    }
//
//};
//
//
//
//class B : public A
//{
//private:
//    virtual void f()
//    {
//        cout << "B::f()" << endl;
//    }
//};
//
//int main() {
//    A* pa = (A*)new B;
//    pa->f();
//}

//以下程序输出结果是什么？
class A
{
public:
    A() :m_iVal(0) { test(); }
    virtual void func() { std::cout << m_iVal << " "; }
    void test() { func(); }

public:

    int m_iVal;

};

class B : public A
{
public:
    B() { test(); }
    virtual void func()
    {
        ++m_iVal;
        std::cout << m_iVal << " ";
    }
};

int main(int argc, char* argv[])
{
    A* p = new B;
    p->test();

    return 0;
}